<?php
require_once('DataAccess.php');
require_once('Programa.php');

/**
Interface DAO de Programa. Estes m�todos N�O devem ser chamados diretamente.
Ao inv�s disso devem ser chamados por m�todos da classe Programa.
*/

class ProgramaDAO
{
      private $database;

      public function __construct( )
      {
               $this->database = DataAccess::getConnection();
      }
      
      public function  CadastrarPrograma( $programa )
      {
      	$consulta = $this->database->Fetch("BEGIN");
      	
      	if ( $consulta )
      	{
      		$ano = $programa->ano;
      		$nomePrograma = $programa->nomePrograma;
      		$consulta = $this->database->Fetch("INSERT into t_programa (t_ano_id , t_nome_programa_id, cod_resumido , cod_completo , nome )
      											VALUES('$ano->id', '$nomePrograma->id' ,'$programa->codResumido', '$programa->codCompleto','$programa->nome')");
      		if( $consulta )
      		{
      			$this->database->Fetch("COMMIT");
      			return TRUE;
      		} 
      		else
      		{
      			$this->database->Fetch("ROLLBACK");
      			return FALSE;
      		}
      	}
      	else
      	{
      		$this->database->Fetch("ROLLBACK");
      		return FALSE;
      	}
      		
      }
      
      public function AlterarPrograma( $programa )
      {
      	$consulta = $this->database->Fetch("BEGIN");
      	
      	if( $consulta )
      	{
      		$consulta = $this->database->Fetch("UPDATE t_programa 
      											SET Cod_Resumido = '$programa->codResumido' ,
      											cod_Completo = '$programa->codCompleto',
      											nome = '$programa->nome'
      											where id = '$programa->id'");
      		if ( $consulta )
      		{
      			$this->database->Fetch("COMMIT");
      			return TRUE;
      		}
      		else
      		{
      			$this->database->Fetch("ROLLBACK");
      		}
      	}
      	else
      	{
      		$this->database->Fetch("ROLLBACK");
      	}
      }
      
      public function ExcluirPrograma( $programaId )
      {
      	$consulta = $this->database->Fetch("BEGIN");
      	
      	if( $consulta )
      	{
      		$consulta = $this->database->Fetch("Delete from t_programa where id = '$programaId'");
      		
      		if ( $consulta )
      		{
      			$this->database->Fetch("COMMIT");
      			return TRUE;
      		}
      		else
      		{
      			$this->database->Fetch("ROLLBACK");
      		}
      	}
      	else
      	{
      		$this->database->Fetch("ROLLBACK");
      	}
      	
      }

      /**
      Busca na tabela t_programa por todos os registros de programa que possuam chave-estrangeira $anoId.
      Para cada registro encontrado ser� criada uma inst�ncia de Programa com os valores das colunas do registro em quest�o.
      Por fim, caso sejam encontrados registros, todas as inst�ncias criadas ser�o inseridas dentro de um array que ser� retornado por este m�todo.
      Caso contr�rio, ser� retornado FALSE indicando que n�o foi encontrado nenhum registro.
      @anoId - Chave-prim�ria do ano ao qual o programa est� vinculado.
      @return - Retorna um array de objetos do tipo Programa. Caso n�o encontre nenhum resultado, retorna FALSE.
     */
      public function LoadProgramas( $anoId )
      {
             $consulta = $this->database->Fetch(" SELECT * FROM t_programa WHERE t_ano_id = '$anoId' order by nome");
             if( $consulta != FALSE )
             {
                  $rows = $this->database->getRow();
                  $objetos = array();

                  for( $i = 0; $i < count($rows); $i++ )
                  {
                       $programa = new Programa();
                       $programa->id = $rows[$i]['id'];
                       $ano = new Ano();
                       $anoSelecionado = $ano->CarregarAno( $rows[$i]['t_ano_id'] );
                       $programa->ano = $anoSelecionado;
                       $programa->codResumido = $rows[$i]['cod_resumido'];
                       $programa->codCompleto = $rows[$i]['cod_completo'];
                       $programa->nome = $rows[$i]['nome'];
                       $nomePrograma = new NomePrograma();
                       $programa->nomePrograma = $nomePrograma->CarregarPrograma($rows[$i]['t_nome_programa_id']);

                       $objetos[] = $programa;
                  }

                  return $objetos;
             }
             else if( mysql_num_rows( $consulta ) == 0 )
             {
                 return FALSE;
             }
      }
      
	  public function LoadAcoes( $anoId )
      {
            
      		$consulta = $this->database->Fetch("SELECT p.* FROM t_programa  p, t_nome_programa n WHERE p.t_nome_programa_id = n.id and n.t_ano_id = '$anoId' order by nome");
             if( $consulta != FALSE )
             {
                  
             	  $rows = $this->database->getRow();
                  $objetos = array();

                  for( $i = 0; $i < count($rows); $i++ )
                  {
                  	   	   
                       $programa = new Programa();
                       $programa->id = $rows[$i]['id'];
                       $ano = new Ano();
                       $anoSelecionado = $ano->CarregarAno( $rows[$i]['t_ano_id'] );
                       $programa->ano = $anoSelecionado;
                       $nomePrograma = new NomePrograma();
                       $nomeProgramaSelecionado = $nomePrograma->CarregarPrograma($rows[$i]['t_nome_programa_id']);
                       $programa->nomePrograma = $nomeProgramaSelecionado;
                       $programa->codResumido = $rows[$i]['cod_resumido'];
                       $programa->codCompleto = $rows[$i]['cod_completo'];
                       $programa->nome = $rows[$i]['nome'];

                       $objetos[] = $programa;
                  }

                  return $objetos;
             }
             else if( mysql_num_rows( $consulta ) == 0 )
             {
                 return FALSE;
             }
      }
      
      /**
      Busca na tabela t_programa pelo registro associado � chave-prim�ria $id.
      Caso um registro seja encontrado ser� criada uma inst�ncia de Programa com os valores das colunas do registro em quest�o.
      @id - Chave-prim�ria do Programa cadastrado no banco de dados.
      @return - Retorna um objeto Programa com as informa��es encontradas no registro. Caso n�o encontre nenhum resultado, retorna FALSE.
      */
      public function LoadPrograma( $id )
      {
             $consulta = $this->database->Fetch("SELECT * FROM t_programa WHERE ID = '$id'");
             if( $consulta != FALSE )
             {
                 $rows = $this->database->getRow();
                 $programa = new Programa();
                 $programa->id = $rows[0]['id'];
                 $ano = new Ano();
                 $anoId = $rows[0]['t_ano_id'];
                 $anoSelecionado = $ano->CarregarAno( $anoId );
                 $programa->ano = $anoSelecionado;
                 $nomeProgramaObj = new NomePrograma();
                 $programa->nomePrograma = $nomeProgramaObj->CarregarPrograma($rows[0]['t_nome_programa_id']);
                 $programa->codResumido = $rows[0]['cod_resumido'];
                 $programa->codCompleto = $rows[0]['cod_completo'];
                 $programa->nome = $rows[0]['nome'];

                 return $programa;
             }
             else if( mysql_num_rows( $consulta ) == 0 )
             {
                 return FALSE;
             }
      }
      
      /**
      Busca no banco de dados pelo nome do programa que est� vinculada a fonte de chave-prim�ria $fonteId.
      @fonteId - Chave-prim�ria da fonte cadastrada no banco.
      @return - Retorna uma string com o nome do programa. Caso n�o encontre nenhum resultado, retorna FALSE
      */
      public function LoadProgramPorFonte( $fonteId )
      {
               $consulta = $this->database->Fetch("SELECT p.nome as programa
                                                   FROM t_compra c, t_fonte f, t_programa p
                                                   WHERE c.t_fonte_id = '$fonteId'
                                                         AND f.id = c.t_fonte_id
                                                         AND f.id = f.t_programa_id
                                                         AND f.t_programa_id = p.id");
               if( $consulta != FALSE )
               {
                   $rows = $this->database->getRow();

                   $programa = $rows[0]['programa'];

                   return $programa;
             }
             else if( mysql_num_rows( $consulta ) == 0 )
             {
                   return FALSE;
             }
      }
}
?>
